【Sklearn】【API详解】【SVM】sklearn.svm.SVC参数详解(一) 您所在的位置:网站首页 libsvm 参数设置 【Sklearn】【API详解】【SVM】sklearn.svm.SVC参数详解(一)

【Sklearn】【API详解】【SVM】sklearn.svm.SVC参数详解(一)

2024-01-21 18:56| 来源: 网络整理| 查看: 265

目录 1. 前言2. 简介3. 语法3.1 API形式3.2 参数说明3.3 属性说明 4. 方法说明4.1 decision_function(X)4.2 fit(X, y, sample_weight=None)4.3 get_params(deep=True)4.4 predict(X)4.5 predict_log_proba(X)4.6 predict_proba(X)4.7 score(X, y, sample_weight=None)4.8 set_params(**params) 5. 总结6. 参考资料

1. 前言 转载请注明出处文章中有一部分内容是个人理解,所以内容仅供参考这篇文章是讲解sklearn库中SVM部分中SVC这一API.关于实战部分可以参考这篇文章(有源码,可直接运行):【Sklearn】【实战】【SVM】乳腺癌检测,模拟线上部署(1)这里是官方说明文档传送门:sklearn.svm.SVC本文约7000字,阅读完毕大约需要10分钟本文可当做开发时的开发手册作为参考,建议收藏 2. 简介 SVC为Support Vector Classification的简写,顾名思义,其是基于支持向量的分类器SVC是基于libsvm实现的SVC的拟合时间是和样本数量呈二次方指数关系,因此这一分类模型适用于样本较小情况,如果样本数量过大(超过1W),建议使用其他模型,例如LinearSVC 或者 SGDClassifier 3. 语法 3.1 API形式 形式如下,里面的参数均为默认参数 SVC( C=1.0, kernel='rbf', degree=3, gamma='scale', coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=- 1, decision_function_shape='ovr', break_ties=False, random_state=None) 3.2 参数说明 参数名称数据作用C正则化系数float类型,默认值为1.01. 正则化的强度与C的大小成反比,且必须为正。 2. 主要是用来防止模型过拟合3. C值越大,对模型的惩罚越高,泛化能力越弱(过拟合)4. 反之,C值越小,对模型的惩罚越低,泛化能力越强(欠拟合)kernel核函数1. string类型2. {‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’} 3. 默认值为’rbf’1. 用来选择映射到高维线性可分的核函数 2. linear: 线性核函数; 优点: 简单、运算效率高;缺点: 对线性不可分的数据集没有很好的效果 3. ploy: 多项式核函数; 优点: 可以拟合出复杂的分割超平面;缺点: 有三个参数,调参困难,且当n过大时,模型拟合时间会很长 ;4. rbf: 径向基函数 通常定义为样本到数据中心之间径向距离(通常是欧氏距离)的单调函数(由于距离是径向同性的); 相较于多项式核,具有参数少的优点 5. sigmoid:Logistic函数 也称为S型生长曲线,优点:平滑 6. precomputed:预训练好的核函数对应的Gram 矩阵 优点: 不用再次拟合核函数对应的Gram 矩阵,直接进行映射就可以了degree多项式核函数的维度1. int类型,默认值为31. 只有在使用多项式核函数的时候才有用,使用其他核函数自动忽略此参数 2. 用来确定多项式核函数的维度,即n的值gamma‘rbf’, ‘poly’ 和‘sigmoid’ 核函数的系数1. string类型,默认值为‘scale’ 2. {‘auto’, ‘scale’}1. auto: gamma = 1 / n_features 2. scale: gamma = 1 / (n_features * X.var()) 3. 只作用于 rbf, poly,sigmoid 三个核函数coef0常数项1. float类型,默认值为01. 只作用于poly 和 sigmoid 核函数 2. 作用相当于是对核函数映射的结果进行一个移位操作shrinking启用启发式收缩1. bool类型,默认为True1. 是否采用启发式收缩,当迭代次数过大时, 启用启发式收缩可以缩短训练时间,然而如果我们对停止迭代容忍度较高时(tol参数来反映),不用启发式收缩可能会更快一些probability启用概率估计1. bool类型,默认为False1. 在拟合(fit)模型之前启用 2. 启用之后会减缓拟合速度,但是拟合之后,模型能够输出各个类别对应的概率tol停止拟合容忍度1. float类型,默认值为1e-3 即为0.0011. 定义模型停止拟合的误差值cache_size核缓存大小1. float类型,默认值为200(MB)1. 指定模型在训练时,能占用的最大RAM空间(PS. 经过实验,当大小设置超过2000MB时,训练时长反而会增加,这应该是一个BUG),在2000MB以内,不超过其所需最大内存,则不会降低训练速度,也不会增加。 2. 所以训练多采用的数据集维度越高,条数越高,当所需内存超出了,我们可以通过调整cache_size 的大小来加快模型拟合class_weight类别的权重1. 字典,默认值为None 2. {dict} or ‘balanced’1. 该参数表示给每个类别分别设置不同的惩罚参数C 2. 如果没有给,则会给所有类别都给C=1,即前面参数指出的参数C 3. 如果给定参数‘balance’,自动调整权重 C = n_samples / (n_classes * np.bincount(y)) 其中y为每个训练数据的标签值verbose启用详细输出1. bool类型,默认值:False1. 该参数表示日志是否启用详细输出,会输出iter次数,nSV等参数的值 2. 如果启用,可能会导致无法进行多线程工作,降低拟合速率max_iter最大迭代次数1. int类型,默认值: -11. 硬性设置最大迭代次数,不管模型是否拟合完成,即不关心误差值(tol参数) 2. 设置-1的话,意味着不限制迭代次数,即按照误差值来停止模型拟合decision_function_shape多分类策略1. 字典类型 ,默认值: ‘ovr’1. 设置进行多分类任务时,采用的分类策略 2. 当进行二分类任务时,这一参数被自动忽略break_ties启用打破平局1. bool类型,默认值为Flase1. 当进行多分类任务时可以启用 2. 启用后,多分类策略会被设置为 ovr 3. 作用在于,当两个类别具有相同的分类概率时,则根据类名排序,返回第一个类,如果启用之后,则会根据decision_function的置信度来决定返回的类 4. 启用之后,会增加计算开销,降低拟合好后的模型预测效率random_state随机数1. int类型,默认值:None1. 控制伪随机数生成,保证多次训练时,打乱的数据是一致的,从而进行概率估计。2. 当 probability 设置 False时,这一参数被自动忽略 3.3 属性说明 属性名称数据作用class_weight各类权重1. ndarray,一维数组,(n_classes, )1. 用来获取模型对各个类别设置的权重,与参数中的class_weight相关 2. 数组长度为类别数,内容为每个类的权重classes_类别1. ndarray,一维数组 ,(n_classes, )1. 用来获取各个类别的标签 2. 数组的长度为类别数,内容为每个类对应的标签coef_特征权重向量1. ndarray,二维数组,(n_classes * (n_classes - 1) / 2, n_features)1. 获取特征权重向量 2. 当核函数为linear时,才可以调用这一属性dual_coef_对偶系数1. ndarray,二维数组,(n_classes -1, n_SV)1. decision_funciton 中的支持向量的对偶系数 2. n_SV 为支持向量的个数 3. 所有 ovo 分类器的系数fit_status_拟合状态1. int类型1. 拟合成功0, 否则为1,进行告警intercept_决策函数常量1. ndarray,一维数组, (n_classes * (n_classes - 1) / 2, )1. decision_funciton 中的常量n_features_in_特征数量1. int类型1. 拟合过程中使用到的特征数量feature_names_in_特征名称1. ndarray,一维数组,(n_features_in_,)1. 获取拟合时特征的名称support_支持向量索引1. ndarray,一维数组, (n_SV,)1. 获取模型拟合后获得的所有支持向量的索引support_vectors_支持向量1. ndarray,二维数组,(n_SV, n_features)1. 获取所有的支持向量n_support_每类的支持向量数1. ndarray,一维数组 ,(n_classes,), dtype=int321. 获取每种类别的支持向量数probA_platt scaling系数A1. ndarray, 一维数组, (n_classes * (n_classes - 1) / 2, )1. 只有当 probability=True.时,这一系数A才会被计算 ,probability=False,则为空数组。probB_platt scaling纠正项B1. ndarray, 一维数组, (n_classes * (n_classes - 1) / 2, )1. 只有当 probability=True.时,这一纠正项B才会被计算,probability=False,则为空数组。shape_fit_训练向量维度数1.元组,(n_dimensions_of_X,)1. 训练向量X的数组维度 4. 方法说明 4.1 decision_function(X)

1. 描述: 计算所有样本X的决策函数 2. 参数: X为所有样本组成的二维数组,大小为(n_samples, n_features) 3. 返回值: 返回模型中每个类的样本决策函数,大小为 (n_samples, n_classes * (n_classes-1) / 2) 4. 注意: 如果decision_function_shape =“ ovr”,则返回值的大小为(n_samples,n_classes)

4.2 fit(X, y, sample_weight=None)

1. 描述: 用训练数据拟合模型 2. 参数: X: 训练数据; y: 训练数据标签; sample_weight: 每个样本的权重,(n_samples,) 3. 返回值: 自身,拟合好的模型 4. 注意: 无

4.3 get_params(deep=True)

1. 描述: 获取模型的所有参数 2. 参数: 如果为真,则将返回此模型和作为模型的所包含子对象的参数 3. 返回值: 字典类型, 所有的参数 4. 注意: 无

4.4 predict(X)

1. 描述: 用拟合好的模型对所有样本X进行预测 2. 参数: 所有预测样本,二维数组(n_samples, n_features) 3. 返回值: 所有预测 X的预测标签,一维数组,(n_sample, ) 4. 注意: 无

4.5 predict_log_proba(X)

1. 描述: 计算所有预测样本在每个类别上的对数概率 2. 参数: 所有预测样本,二维数组(n_samples, n_features) 3. 返回值: 返回模型中每个类的样本的对数概率,二维数组,(n_samples, n_classes) 4. 注意: 在模型训练时,需要将 probability参数设置为True,才能使用此方法

4.6 predict_proba(X)

1. 描述: 计算所有预测样本在每个类别上的概率 2. 参数: 所有预测样本,二维数组(n_samples, n_features) 3. 返回值: 返回模型中每个类的样本的对数概率,二维数组,(n_samples, n_classes) 4. 注意: 在模型训练时,需要将 probability参数设置为True,才能使用此方法

4.7 score(X, y, sample_weight=None)

1. 描述: 返回给定测试数据上的平均准确度 2. 参数: X: 训练数据; y: 训练数据标签; sample_weight: 每个样本的权重,(n_samples,) 3. 返回值: 浮点类型,平均准确度 4. 注意: 无

4.8 set_params(**params)

1. 描述: 重置当前模型的参数 2. 参数: 字典类型,内容为当前模型的参数 3. 返回值: 重置参数后的模型 4. 注意: 无

5. 总结

不知不觉六个小时已经过去了,这会儿已经凌晨四点了。本以为这篇文章两个小时就能结束。无奈中间遇到了一个又一个不懂的知识点,整个过程就像升级打怪一样,在整理整个API的过程中,个人对模型的理解更深刻了,颇有收获。

有时间再继续往下更新~

希望这篇文档能对各位看官产生一定的帮助, 如有不妥,欢迎评论区指正~

6. 参考资料 LIBSVM: A Library for Support Vector Machines 英文版:sklearn.svm.SVCRBF径向基函数Gram矩阵和核函数SVM的概率输出(Platt scaling)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有